perm filename BPNT11.PAL[ETH,REG] blob sn#209148 filedate 1980-03-16 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00007 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	.SBTTL	BREAKPOINT FUNCTIONS, 1-JULY-75
C00004 00003	BREAK POINT TRAP
C00006 00004	BREAKPOINT CONTINUE
C00008 00005	REMOVE BREAKPOINTS
C00010 00006	REGISTER RESTORE
C00011 00007	SEARCH BP TABLE FOR ADDRESS IN R2
C00012 ENDMK
CāŠ—;
.SBTTL	BREAKPOINT FUNCTIONS, 1-JULY-75

;BP		;PRINTS ACTIVE BREAKPOINTS
;BP ADR		;INSERT BP

;BC		;BP CONTINUE
;BC COUNT	;BP CONTINUE FOR COUNT

;RB		;REMOVE CURRENT BP
;RB 0		;REMOVE ALL BP'S
;RB ADR		;REMOVE BP AT ADR

;BREAK POINT INSERTION

.BP:	TTISDL
	 BCC	4$		;NUMBER, INSERT BP

1$:	MOV	#$BT+2,R1	;PRINT ACTIVE BP'S
2$:	MOV	(R1),R0		;GET BP ADDRESS
	BEQ	3$		;EMPTY
	PNTOCT			;PRINT BP ADDRESS
3$:	ADD	#6,R1
	CMP	R1,#$BT+<6*$NB>	;FINISHED ?
	BLT	2$		;NO
	BR	$BPEX1

4$:	TTOCTE			;INPUT EVEN ADDRESS
	MOV	R0,R2
	JSR	PC,$BTS		;SEARCH BP TABLE
	BCC	$BPERR		;ALREADY THERE
	BEQ	$BPERR		;TABLE FULL ALREADY

	MOV	R2,(R1)		;PUT INST ADR IN BP TABLE
	MOV	(R2),-(R1)	;PUT INST IN BP TABLE
	CLR	4(R1)		;CLEAR CONTINUE COUNT

	MOV	#IOT,(R2)	;PUT BP IN PLACE OF INST
	BR	$BPEXT
;BREAK POINT TRAP

$BRKPT:	CLR	.HCFLG
	MOV	R0,$R0SAV	;SAVE ALL REGS R0 - R5
	MOV	#$R1SAV,R0
	MOV	R1,(R0)+
	MOV	R2,(R0)+
	MOV	R3,(R0)+
	MOV	R4,(R0)+
	MOV	R5,(R0)+
	MOV	SP,(R0)		;FOR REG PRINT ONLY, NOT RESTORED
	ADD	#4,(R0)		;MAKE IT AS IT WAS BEFORE BP

	MOV	(SP),R2		;GET AFTER TRAP PC
	TST	-(R2)		;MAKE IT BEFORE TRAP PC
	JSR	PC,$BTS		;FIND BP IN TABLE

1$:	MOV	R2,(SP)		;PUT ADR ON STACK FOR "RTI" LATER
	MOV	R2,$BCA		;SAVE BP CONTINUE ADDRESS
	PUSH	-(R1)		;SAVE PROGRAM INST ON STACK
	DEC	4(R1)		;DECREMENT CONTINUE COUNT
	BGT	.ABC		;COUNT GT 0, AUTO CONTINUE

2$:	CLR	TENRUN
	PFORCE
	PMSG	<\BP AT >
	MOV	R2,R0
	PNTOCT
	PMSG	<PS=>
	MOV	4(SP),R0
	PNTOCT
$BPEX1:	PCRLF
$BPEXT:	JMP	$CONSL		;RETURN TO MONITOR

$BPERR:	PMSG	<BP ERR>
	BR	.BPERR
;BREAKPOINT CONTINUE

.BC:	TTISDL
	 BCC	.BCCNT		;CONTINUE COUNT

.ABC:	CMP	$BCA,2(SP)	;IS STACK OK, IF SO CONTINUE
	BEQ	1$		;OTHERWISE SP BAD OR NOT IN BP
.BCERR=.
	PMSG	<CAN'T CONT>
.BPERR=.
	JMP	$CNTLC

1$:	MOV	@$BCA,$BTIS	;SAVE WHATS AT BP ADDRESS
	POP	@$BCA		;RESTORE PROGRAM INST
	JSR	PC,.BCHC2	;RESTORE REGISTERS
	BIS	#TBIT,2(SP)	;SET FOR T-BIT TRAP
	RTT			;RESTART FOR ONE INSTRUCTION

;T-BIT TRAP COMES TO HERE

.BCCT:	BIC	#TBIT,2(SP)	;CLEAR T-BIT
	MOV	$BTIS,@$BCA	;PUT BP/INST BACK IN PROGRAM
	RTI			;RESUME

.BCCNT:	TTIDEC			;INPUT	CONTINUE COUNT
	BCS	$BPERR
	MOV	R0,R5
	MOV	$BCA,R2
	JSR	PC,$BTS		;FIND ENTRY IN TABLE
	BCS	.BCERR		;NOT THERE
1$:	MOV	R5,2(R1)	;PUT COUNT IN TABLE
	BR	.ABC
;REMOVE BREAKPOINTS

.RB:	TTISDL
	BCS	2$		;REMOVE CURRENT BP

	TTOCTE			;INPUT BP ADDRESS
	TST	R0
	BEQ	4$		;IF 0, REMOVE ALL BP'S

	MOV	R0,R2
3$:	JSR	PC,$BTS		;FIND ADDRESS IN TABLE
	BCC	1$
	PMSG	<CAN'T FIND>
	BR	.BPERR

1$:	JSR	PC,$RB		;REMOVE BP
11$:	BR	$BPEXT

2$:	MOV	$BCA,R2		;REMOVE CURRENT BP
	BR	3$

4$:	JSR	PC,.CB		;CLEAR ALL BP'S
	BR	$BPEXT

;CLEAR ALL BREAKPOINTS

.CB:	MOV	#$BT+2,R1
1$:	MOV	(R1),R2		;GET TABLE ENTRY
	BEQ	2$		;EMPTY
	JSR	PC,$RB		;REMOVE BP
2$:	ADD	#6,R1
	CMP	R1,#$BT+<6*$NB>
	BLT	1$
	RTS	PC

$RB:	CLR	(R1)		;CLEAR ADDRESS FIELD
	CMP	(R2),#IOT	;BP IN MEMORY ?
	BNE	1$		;NO
	MOV	-2(R1),(R2)	;YES, RESTORE INSTRUCTION
1$:	RTS	PC
;REGISTER RESTORE

.BCHC:	TTITRM
.BCHC2:	MOV	#$R0SAV,R5
	MOV	(R5)+,R0
	MOV	(R5)+,R1
	MOV	(R5)+,R2
	MOV	(R5)+,R3
	MOV	(R5)+,R4
	MOV	(R5),R5
	RTS	PC

;BREAKPOINT REGISTER PRINTOUT

.RG:	PFORCE
	CLR	R2		;REGISTER NUMBER
	MOV	#$R0SAV,R1	;REG SAVE TABLE POINTER

1$:	PNTCI
	'R
	MOV	R2,R0
	PNTNBR			;PRINT REGISTER NUMBER
4$:	PSLASH

2$:	MOV	(R1)+,R0
	PNTOCT			;PRINT CONTENTS
	INC	R2
	CMP	R2,#6
	BLT	1$
	BGT	3$

	PNTCI
	"SP
	BR	4$

3$:	BR	$BPEX1
;SEARCH BP TABLE FOR ADDRESS IN R2
;C-BIT SET SEARCH FAILURE
;C-BIT & Z-BIT SET SEARCH FAILURE & TABLE FULL
;	R1 = ADDRESS OF EMPTY SLOT IF TABLE NOT FULL
;C-BIT CLEAR, FOUND & R1 = ADDRESS OF ENTRY

$BTS:	MOV	#$BT+2,R1	;INIT BP TABLE POINTER
	CLR	R0
1$:	TST	(R1)		;IS IT EMPTY ?
	BNE	2$		;NO
	MOV	R1,R0		;YES, SAVE ADDRESS OF EMPTY SLOT
	BR	3$

2$:	CMP	(R1),R2		;IS THIS THE ENTRY ?
	BNE	3$		;NO

	CCC			;YES, INDICATE WITH C-BIT CLEAR
	RTS	PC

3$:	ADD	#6,R1		;STEP TO NEXT ENTRY
	CMP	#$BT+<6*$NB>,R1
	BGT	1$
	MOV	R0,R1		;COUNDN'T FIND, Z-BIT SET = FULL
	SEC			;INDICATE WITH C-BIT SET
	RTS	PC